﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace Sinacor.Infra.Tools
{
    //inc - esertorio - 200810101146
    public class ModuloDataAcess
    {
        public List<Modulo> consultar(Modulo modulo)
        {
            return this.filtrar(this.consultarXml(), modulo);
        }

        public List<Modulo> consultar()
        {
            return this.consultarXml();
        }

        private List<Modulo> filtrar(List<Modulo> modulos, Modulo modulo)
        {
            int qtdeLoops = modulos.Count;
            List<Modulo> listaFiltrada = new List<Modulo>();
            for (int i = 0; i < qtdeLoops; i++)
            {
                if (modulos[i].Id == modulo.Id)
                {
                    listaFiltrada.Add(modulos[i]);
                    return listaFiltrada;
                }
                else if (modulos[i].Descricao == modulo.Descricao)
                {
                    listaFiltrada.Add(modulos[i]);
                }
            }
            return listaFiltrada;
        }

        /// <summary>
        /// busca os módulos cadastrados no xml .config, feito rapidamente, por isso 
        /// não usa XSD nem xpath num xml personalizado
        /// </summary>
        /// <param name="modulo"></param>
        /// <returns></returns>
        private List<Modulo> consultarXml()
        {
            string modulo = System.Configuration.ConfigurationManager.AppSettings["MODULOS"];
            if (string.IsNullOrEmpty(modulo)) throw new Exception("Não existem módulos cadastrados no arquivo de configuração.");
            string[] modulos = modulo.Replace("\r", "").Replace("\n", "").Split(';');
            int qtdeLoops = modulos.Length;

            Modulo entidade = null;
            List<Modulo> listaModulos = new List<Modulo>();
            for (int i = 0; i < qtdeLoops; i++)
            {
                if ((!string.IsNullOrEmpty(modulos[i])) && modulos[i].IndexOf(',') > -1)
                {
                    string [] propriedadesModulo = modulos[i].Split(',');
                    entidade = new Sinacor.Infra.Tools.Modulo();
                    entidade.Id = propriedadesModulo[0];
                    entidade.Descricao = propriedadesModulo[1];
                }
                else
                {
                    entidade.Id = modulos[i];
                    entidade.Descricao = entidade.Id;
                }
                listaModulos.Add(entidade);
            }
            return listaModulos;
        }
    }
}
